package com.mondo.financialwallet.data.net;

import com.mondo.financialwallet.data.entity.BasisResponseEntity;
import com.mondo.financialwallet.data.entity.CheckMessageCodeResultEntity;
import com.mondo.financialwallet.data.entity.ClearProductDetailsEntity;
import com.mondo.financialwallet.data.entity.HoldProductDetailsEntity;
import com.mondo.financialwallet.data.entity.HoldProductListEntity;
import com.mondo.financialwallet.data.entity.HoldProductProfitDataEntity;
import com.mondo.financialwallet.data.entity.LoginUserInfoEntity;
import com.mondo.financialwallet.data.entity.ProductListEntity;
import com.mondo.financialwallet.data.entity.ProductOrderListEntity;
import com.mondo.financialwallet.data.entity.SingleHoldProductProfitDataEntity;
import com.mondo.financialwallet.data.entity.UserAssetsEntity;
import com.mondo.financialwallet.data.entity.UserInfoEntity;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Path;

/**
 * 默认服务器
 */
public interface DefaultWebApi {

    /**
     * 获取用户信息
     */
    @GET("user")
    Observable<UserInfoEntity> userDetails();

    /**
     * 用户资产
     */
    @GET("asset")
    Observable<UserAssetsEntity> userAssets();

    /**
     * 修改头像
     */
    @Multipart
    @POST("user/avatar")
    Observable<BasisResponseEntity> modifyAvatar(@Part MultipartBody.Part avatar);

    /**
     * 检测短信验证码
     */
    @FormUrlEncoded
    @POST("user/check_code_by_username")
    Observable<CheckMessageCodeResultEntity> checkMessageCodeResult(
            @Field("username") String mobileNumber, @Field("code") String code
    );

    /**
     * 发送短信
     */
    @FormUrlEncoded
    @POST("user/send_code_by_username")
    Observable<BasisResponseEntity> sendMessageByUser(@Field("value") String mobileNumber);

    /**
     * 修改用户昵称
     */
    @FormUrlEncoded
    @POST("user/nickname")
    Observable<BasisResponseEntity> alterNickname(@Field("nickname") String nickname);

    /**
     * 重置登录密码
     */
    @FormUrlEncoded
    @POST("user/change_password")
    Observable<BasisResponseEntity> alterPassword(
            @Field("password") String password, @Field("username") String mobileNumber,
            @Field("token") String token, @Field("code") String code
    );

    /**
     * 修改登录密码
     */
    @FormUrlEncoded
    @PUT("user/1")
    Observable<BasisResponseEntity> alterLoginPassword(
            @Field("old_password") String oldPassword, @Field("new_password") String newPassword,
            @Field("code") String code
    );

    /**
     * 发送短信验证码
     */
    @FormUrlEncoded
    @POST("user/send_code")
    Observable<BasisResponseEntity> sendMessageCode(
            @Field("type") int type, @Field("mobile_prefix") CharSequence prefix,
            @Field("value") CharSequence value
    );

    /**
     * 注册
     */
    @FormUrlEncoded
    @POST("user")
    Observable<BasisResponseEntity> register(
            @Field("invite_id") CharSequence inviteId, @Field("code") CharSequence code,
            @Field("mobile") CharSequence mobile, @Field("password") CharSequence password,
            @Field("type") int type, @Field("mobile_prefix") CharSequence prefix,
            @Field("email") CharSequence email
    );

    /**
     * 绑定新手机
     */
    @FormUrlEncoded
    @POST("user/bind_mobile")
    Observable<BasisResponseEntity> bindNewMobileNumber(
            @Field("mobile") String mobile, @Field("code") String code,
            @Field("mobile_prefix") String prefix
    );

    /**
     * 绑定邮箱
     */
    @FormUrlEncoded
    @POST("user/bind_email")
    Observable<BasisResponseEntity> bindEmail(
            @Field("email") String email, @Field("code") String code);

    /**
     * 登录
     */
    @FormUrlEncoded
    @POST("user/mobile_login")
    Observable<LoginUserInfoEntity> login(
            @Field("mobile_prefix") CharSequence prefix, @Field("mobile") CharSequence mobile,
            @Field("password") CharSequence password
    );


    /**
     * 产品列表
     */
    @GET("goods")
    Observable<ProductListEntity> productList();

    /**
     * 理财订单列表
     */
    @GET("order/index_app")
    Observable<ProductOrderListEntity> productOrderList();

    /**
     * 持有产品列表
     */
    @GET("order/get_order_list")
    Observable<HoldProductListEntity> holdProductList();

    /**
     * 持有产品收益数据
     */
    @GET("profit")
    Observable<HoldProductProfitDataEntity> holdProductProfitData();

    /**
     * 获取单个产品收益数据
     */
    @GET("profit/{orderNumber}")
    Observable<SingleHoldProductProfitDataEntity> singleHoldProductProfitData(
            @Path("orderNumber") String orderNumber
    );

    /**
     * 清算产品
     */
    @FormUrlEncoded
    @POST("clear")
    Observable<BasisResponseEntity> clearProduct(
            @Field("order_no") String orderNumber, @Field("code") String code
    );

    /**
     * 持有产品详情
     */
    @GET("fund/{orderNumber}")
    Observable<HoldProductDetailsEntity> holdProductDetails(
            @Path("orderNumber") String orderNumber);

    /**
     * 清算数据
     */
    @GET("clear/{orderNumber}")
    Observable<ClearProductDetailsEntity> clearProductDetails(
            @Path("orderNumber") String orderNumber);
}
